--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
sbapp/plyer/platforms/linux/cpu.py f23855fb6854e46a5fa4e6cf0be2bcdab4f67547 (f23855fb) Text, 3.48 KB
T8b949e'''
Module of Linux API for plyer.cpu.
'''
Tff7b72from T7ee787osT7ee787.T7ee787path Tff7b72import Te6edf3join
Tff7b72from T7ee787os Tff7b72import Te6edf3environTb4b4b4, Te6edf3listdir
Tff7b72from T7ee787subprocess Tff7b72import Te6edf3PopenTb4b4b4, Te6edf3PIPE
Tff7b72from T7ee787plyerT7ee787.T7ee787facades Tff7b72import Te6edf3CPU
Tff7b72from T7ee787plyerT7ee787.T7ee787utils Tff7b72import Te6edf3whereis_exe
Tff7b72class T56d364LinuxCPUTb4b4b4(Te6edf3CPUTb4b4b4)Tb4b4b4:
T8b949e'''
Implementation of Linux CPU API.
'''
Tff7b72def Td2a8ff_socketsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e# physical CPU sockets (or slots) on motherboard
Te6edf3sockets Tff7b72= Tb4b4b4[Tb4b4b4] T8b949e# list of CPU ids from kernel
T8b949e# open Linux kernel data file for CPU
Tff7b72with Tffa657openTb4b4b4(Ta5d6ff'Ta5d6ff/proc/cpuinfoTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffrbTa5d6ff'Tb4b4b4) Tff7b72as Te6edf3fleTb4b4b4:
Te6edf3lines Tff7b72= Te6edf3fleTff7b72.Td2a8ffreadlinesTb4b4b4(Tb4b4b4)
T8b949e# go through the lines and obtain physical CPU ids
Tff7b72for Te6edf3line Tff7b72in Te6edf3linesTb4b4b4:
Te6edf3line Tff7b72= Te6edf3lineTff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff'Ta5d6ffutf-8Ta5d6ff'Tb4b4b4)
Tff7b72if Ta5d6ff'Ta5d6ffphysical idTa5d6ff' Tff7b72not Tff7b72in Te6edf3lineTb4b4b4:
Tff7b72continue
Te6edf3cpuid Tff7b72= Te6edf3lineTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff'Ta5d6ff:Ta5d6ff'Tb4b4b4)Tb4b4b4[T79c0ff1Tb4b4b4]Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Te6edf3socketsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3cpuidTb4b4b4)
T8b949e# total sockets is the length of unique CPU ids from kernel
Te6edf3sockets Tff7b72= Tffa657lenTb4b4b4(Tffa657setTb4b4b4(Te6edf3socketsTb4b4b4)Tb4b4b4)
Tff7b72return Te6edf3sockets
Tff7b72def Td2a8ff_physicalTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e# cores
Te6edf3physical Tff7b72= Tb4b4b4[Tb4b4b4] T8b949e# list of CPU ids from kernel
T8b949e# open Linux kernel data file for CPU
Tff7b72with Tffa657openTb4b4b4(Ta5d6ff'Ta5d6ff/proc/cpuinfoTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffrbTa5d6ff'Tb4b4b4) Tff7b72as Te6edf3fleTb4b4b4:
Te6edf3lines Tff7b72= Te6edf3fleTff7b72.Td2a8ffreadlinesTb4b4b4(Tb4b4b4)
T8b949e# go through the lines and obtain CPU core ids
Tff7b72for Te6edf3line Tff7b72in Te6edf3linesTb4b4b4:
Te6edf3line Tff7b72= Te6edf3lineTff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff'Ta5d6ffutf-8Ta5d6ff'Tb4b4b4)
Tff7b72if Ta5d6ff'Ta5d6ffcore idTa5d6ff' Tff7b72not Tff7b72in Te6edf3lineTb4b4b4:
Tff7b72continue
Te6edf3cpuid Tff7b72= Te6edf3lineTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff'Ta5d6ff:Ta5d6ff'Tb4b4b4)Tb4b4b4[T79c0ff1Tb4b4b4]Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Te6edf3physicalTff7b72.Td2a8ffappendTb4b4b4(Te6edf3cpuidTb4b4b4)
T8b949e# total cores (socket * core per socket)
T8b949e# is the length of unique CPU core ids from kernel
Te6edf3physical Tff7b72= Tffa657lenTb4b4b4(Tffa657setTb4b4b4(Te6edf3physicalTb4b4b4)Tb4b4b4)
Tff7b72return Te6edf3physical
Tff7b72def Td2a8ff_logicalTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e# cores * threads
Te6edf3logical Tff7b72= Tff7b72None
Te6edf3old_lang Tff7b72= Te6edf3environTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff'Ta5d6ffLANGTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff'Tb4b4b4)
Te6edf3environTb4b4b4[Ta5d6ff'Ta5d6ffLANGTa5d6ff'Tb4b4b4] Tff7b72= Ta5d6ff'Ta5d6ffCTa5d6ff'
Te6edf3_logical Tff7b72= Te6edf3PopenTb4b4b4(Tb4b4b4[Ta5d6ff'Ta5d6ffnprocTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff--allTa5d6ff'Tb4b4b4]Tb4b4b4, Te6edf3stdoutTff7b72=Te6edf3PIPETb4b4b4)
Te6edf3output Tff7b72= Te6edf3_logicalTff7b72.Td2a8ffcommunicateTb4b4b4(Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4]Tff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff'Ta5d6ffutf-8Ta5d6ff'Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3outputTb4b4b4:
Te6edf3logical Tff7b72= Tffa657intTb4b4b4(Te6edf3outputTb4b4b4)
Te6edf3environTb4b4b4[Ta5d6ff'Ta5d6ffLANGTa5d6ff'Tb4b4b4] Tff7b72= Te6edf3old_lang
Tff7b72return Te6edf3logical
Tff7b72def Td2a8ff_cacheTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3values Tff7b72= Tb4b4b4{Te6edf3keyTb4b4b4: T79c0ff0 Tff7b72for Te6edf3key Tff7b72in Tb4b4b4(Ta5d6ff'Ta5d6ffL1Ta5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffL2Ta5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffL3Ta5d6ff'Tb4b4b4)Tb4b4b4}
Te6edf3cpu_path Tff7b72= Te6edf3joinTb4b4b4(Ta5d6ff'Ta5d6ff/sysTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffdevicesTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffsystemTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffcpuTa5d6ff'Tb4b4b4)
T8b949e# get present cores from kernel device
Tff7b72with Tffa657openTb4b4b4(Te6edf3joinTb4b4b4(Te6edf3cpu_pathTb4b4b4, Ta5d6ff'Ta5d6ffpresentTa5d6ff'Tb4b4b4)Tb4b4b4) Tff7b72as Te6edf3fleTb4b4b4:
Te6edf3present Tff7b72= Te6edf3fleTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff'Ta5d6ffutf-8Ta5d6ff'Tb4b4b4)
Te6edf3present Tff7b72= Te6edf3presentTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff'Ta5d6ff-Ta5d6ff'Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3presentTb4b4b4) Tff7b72== T79c0ff2Tb4b4b4:
Te6edf3present Tff7b72= Tffa657rangeTb4b4b4(Tffa657intTb4b4b4(Te6edf3presentTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4) Tff7b72+ T79c0ff1Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3present Tff7b72= Tb4b4b4[Te6edf3presentTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4]
Te6edf3cores Tff7b72= Tb4b4b4[Ta5d6ff'Ta5d6ffcpuTffd700{}Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3iTb4b4b4) Tff7b72for Te6edf3i Tff7b72in Te6edf3presentTb4b4b4]
Tff7b72for Te6edf3core Tff7b72in Te6edf3coresTb4b4b4:
Te6edf3indicies Tff7b72= Tb4b4b4[
T8b949e# get 'indexN' files from 'cache' folder assuming
T8b949e# the filename is in range index0 to index99
T8b949e# in case a wild 'index_whatevercontent' file appears
Te6edf3fle Tff7b72for Te6edf3fle Tff7b72in Te6edf3listdirTb4b4b4(Te6edf3joinTb4b4b4(Te6edf3cpu_pathTb4b4b4, Te6edf3coreTb4b4b4, Ta5d6ff'Ta5d6ffcacheTa5d6ff'Tb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3fleTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff'Ta5d6ffindexTa5d6ff'Tb4b4b4) Tff7b72and Tffa657lenTb4b4b4(Te6edf3fleTb4b4b4) Tff7b72<Tff7b72= Tffa657lenTb4b4b4(Ta5d6ff'Ta5d6ffindexTa5d6ff'Tb4b4b4) Tff7b72+ T79c0ff2
Tb4b4b4]
Tff7b72for Te6edf3index Tff7b72in Te6edf3indiciesTb4b4b4:
Te6edf3index_type Tff7b72= Te6edf3joinTb4b4b4(Te6edf3cpu_pathTb4b4b4, Te6edf3coreTb4b4b4, Ta5d6ff'Ta5d6ffcacheTa5d6ff'Tb4b4b4, Te6edf3indexTb4b4b4, Ta5d6ff'Ta5d6fflevelTa5d6ff'Tb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3index_typeTb4b4b4, Ta5d6ff'Ta5d6ffrbTa5d6ff'Tb4b4b4) Tff7b72as Te6edf3fleTb4b4b4:
Te6edf3cache_level Tff7b72= Te6edf3fleTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff'Ta5d6ffutf-8Ta5d6ff'Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Te6edf3valuesTb4b4b4[Ta5d6ff'Ta5d6ffLTffd700{}Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3cache_levelTb4b4b4)Tb4b4b4] Tff7b72+Tff7b72= T79c0ff1
Tff7b72return Te6edf3values
Tf0883e@staticmethod
Tff7b72def Td2a8ff_numaTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return
Tff7b72def Td2a8ffinstanceTb4b4b4(Tb4b4b4)Tb4b4b4:
T8b949e'''
Instance for facade proxy.
'''
Tff7b72import T7ee787sys
Tff7b72if Te6edf3whereis_exeTb4b4b4(Ta5d6ff'Ta5d6ffnprocTa5d6ff'Tb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3LinuxCPUTb4b4b4(Tb4b4b4)
Te6edf3sysTff7b72.Td2a8ffstderrTff7b72.Td2a8ffwriteTb4b4b4(Ta5d6ff"Ta5d6ffnproc not found.Ta5d6ff"Tb4b4b4)
Tff7b72return Te6edf3CPUTb4b4b4(Tb4b4b4)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────